package com.aaa.threadadvanced.demo05;

import java.util.ArrayList;

/**
 * @author C-Q
 * @version 1.1.0
 * @Description: 主流的线程安全有哪几个类：以下三个
 * set接口下的安全类:  使用方式和原来的一样。
 * ​       CopyOnWriteArraySet:
 * List接口下的安全类:
 * ​       CopyOnWriteArrayList:
 * Map接口下的安全类:
 * ​        ConcurrentHashMap
 *
 * 线程安全演示
 * @date 2022/11/2
 */
public class Test01 {
    public static void main(String[] args) {
        ArrayList<Object> list = new ArrayList<>(10);
        for (int i = 0; i <=8; i++) {
            final int a=i;
            new Thread(new Runnable() {
                @Override
                public void run() {
                    list.add(Thread.currentThread().getName()+"~~~"+a);
                    System.out.println(list);
                }
            }).start();
        }
    }
}
//打印多次后就会出现以下的线程安全问题：
    /*Exception in thread "Thread-6" java.util.ConcurrentModificationException
        at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
        at java.util.ArrayList$Itr.next(ArrayList.java:851)
        at java.util.AbstractCollection.toString(AbstractCollection.java:461)
        at java.lang.String.valueOf(String.java:2994)
        at java.io.PrintStream.println(PrintStream.java:821)
        at com.aaa.threadadvanced.demo05.Test01$1.run(Test.java:26)
        at java.lang.Thread.run(Thread.java:748)*/